package cn.fl.ref.mrgnmanageinfo.service;

import java.util.List;

import cmm.mid.core.framework.dto.DataResultDTO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.ref.fncprjpaysch.vo.FncPrjPaySchMVO;
import cn.fl.ref.mrgnmanageinfo.vo.MrgnDetailInfoVO;
import cn.fl.ref.mrgnmanageinfo.vo.MrgnManageInfoVO;
import cn.fl.ref.mrgnmanageinfo.vo.MrgnTkOffInfoVO;
import fl.flow.facade.flow.dto.FlowStartParamsDTO;

/**
 * @Description: 融资机构基础信息
 * @Description:业务层方法名称前缀：新增：add* 删除：remove* 修改：modify* 查询对象：select* get* 批量：batch* 查询集合：search* 服务层接口, 继承IBaseBiz
 */
public interface IMrgnManageInfoService {
    /**
     * 分页查询所有
     * @param page
     * @return
     */
    public Pager searchListPage(Pager page) throws BaseException;

    /**
     * 添加保证金流水信息
     * @param entity
     * @return
     * @throws BaseException
     */
    public Long addMrgnDetail(MrgnDetailInfoVO entity) throws BaseException;

    /**
     * 根据项目的逻辑编号查询保证金坐扣信息
     * @param id
     * @return
     * @throws BaseException
     */
    public List<MrgnTkOffInfoVO> selectDeductInfoByPrjId(Long id) throws BaseException;
    
    /**
     * 根据项目的逻辑编号查询保证金退回信息
     * @param id
     * @return
     * @throws BaseException
     */
    public List<MrgnDetailInfoVO> selectReturnInfoByPrjId(Long id) throws BaseException;
    
    /**
     * 根据项目的逻辑编号查询项目信息
     * @param id
     * @return
     * @throws BaseException
     */
    public MrgnManageInfoVO  selectPrjInfoByPrjId(Long id) throws BaseException;

    /**
     * 根据保证金的逻辑编号查询项目信息
     * @param id
     * @return
     * @throws BaseException
     */
    public MrgnManageInfoVO selectPrjInfoByMgtLgcSn(Long id) throws BaseException;
    
    /**
     * 修改保证金流水信息
     * @param entity
     */
	public boolean updateMrgnDetail(MrgnDetailInfoVO entity) throws BaseException;

	 /**
	  * 查看退回到帐信息
	  * @param id
	  * @return
	  */
	public MrgnDetailInfoVO selectCheckMrgnInfoById(Long id) throws BaseException;

	/**
	 * 添加保证金坐扣信息
	 * @param entity
	 * @return
	 * @throws BaseException
	 */
	public Long addMrgnTkOffInfo(List<MrgnTkOffInfoVO> entityList) throws BaseException;

	/**
	 * 修改保证金坐扣信息
	 * @param mrgnTkOffInfoList
	 * @return
	 */
	public boolean updateMrgnTkOffInfo(List<MrgnTkOffInfoVO> mrgnTkOffInfoList) throws BaseException;

	/**
	 * 查询还款表信息-添加
	 * @return
	 */
	public List<MrgnTkOffInfoVO> getPrjPaySchInfoAdd(Long prjId) throws BaseException;
	
	/**
	 * 查询还款表信息-修改
	 * @return
	 */
	public List<MrgnTkOffInfoVO> getPrjPaySchInfoUpdate(Long mgtLgcSn) throws BaseException;

	/**
	 * 根据保证金流水信息的逻辑序号查询还款表信息
	 * @param id
	 * @return
	 */
	public List<MrgnTkOffInfoVO> getPrjPaySchInfoById(Long id) throws BaseException;

	/**
	 * 根据保证金流水信息的逻辑序号查询保证金流水信息
	 * @param id
	 * @return
	 */
	public MrgnDetailInfoVO selectMrgnDetailInfo(Long lgcSn) throws BaseException;

	/**
	 * 保证金坐扣-发起流程
	 * 根据用户ID和业务主键等参数启动流程
	 * @param flowStartParamsDTO 启动参数
	 */
	public DataResultDTO addMrgnDeductFlowStart(FlowStartParamsDTO flowStartParamsDTO);

	/**
	 * 保证金退回-发起流程
	 * 根据用户ID和业务主键等参数启动流程
	 * @param flowStartParamsDTO 启动参数
	 */
	public DataResultDTO addMrgnReturnFlowStart(FlowStartParamsDTO flowStartParamsDTO);

	/**
	 * 查询还款主表的还款状态
	 * @param id
	 * @return
	 */
	public FncPrjPaySchMVO selectRepayMainStByPrjId(Long id) throws BaseException;

}
